# 多维数组的运算

import numpy as np
from p0302 import sigmoid

x = np.array([[2, 2, 3],
              [1, 2, 3],
              [3, 4, 5],
              [5, 6, 7]])
print(np.ndim(x))  # 获取数组的维度
print(np.shape(x))  # 数组的形状

y = np.array([[2, 2],
              [3, 3],
              [4, 4]])

z = np.dot(x, y)  # 矩阵乘法
print(z)

x = np.array([1, 2])
w = np.array([[1, 1, 1], [1, 1, 1]])
y = np.dot(x, w)
print(y)

"""
输出层所用的激活函数，要根据求解问题的性质决定。
一般地，回归问题可以使用恒等函数，二元分类问题可以使用 sigmoid 函数，多元分类问题可以使用 softmax 函数
"""

# 3层神经网络的实现，输入层2个节点，第一层3个节点，第二层2个节点，第三层（输出层）2个节点

b = 1
x = np.array([1, 2])  # 输入层
print(x.shape)
w1 = np.array([[0.5, 0.5, 0.4], [0.5, 0.5, 0.6]])  # 第一层权重
print(w1.shape)
z1 = np.dot(x, w1) + b
z1 = sigmoid(z1)

print("第一层结果：")
print(z1)

w2 = np.array([[0.5, 0.5], [0.5, 0.5], [0.5, 0.5]])
z2 = np.dot(z1, w2) + b
z2 = sigmoid(z2)
print("第二层结果：")
print(z2)

w3 = np.array([[0.5, 0.6], [0.4, 0.4]])
z3 = sigmoid(np.dot(z2, w3) + b)
print("第三层结果：")
print(z3)
